// 专门处理权限路由的模块
import { constantRoutes, asyncRoutes } from '@/router'
const state = {
  // 一开始肯定拥有静态路由的权限
  routes: constantRoutes // 路由表的意思，表示当前用户所拥有的路由的数组
}
const mutations = {
  // 定义修改state里面routes的mutation方法
  setRoutes (state, newRoutes) {
    // 载荷认为这个参数是登陆成功要添加的路由
    state.routes = [...constantRoutes, ...newRoutes]// 每次都是在静态路由的基础上面去添加新的路由权限
    // 推出登陆后每一次都从默认的静态路由上面，再去添加这个人所拥有的权限路由
  }
}
const actions = {
  // 筛选权限路由
  // 第二个参数为当前用户的所拥有的菜单权限
  // menus: ["settings","permissions"]
  // asyncRoutes是所有的动态路由  [{path: 'setting',name: 'setting'},{}]
  filterRoutes (context, menus) {
    // 筛选出动态路由中和menus中能够匹配上的路由
    const routes = []
    menus.forEach(key => {
      // key就是标识
      // asyncRoutes里面找有没有对象中的name和key相等的  找不到就是没权限，找到了要给它筛选出来
      routes.push(...asyncRoutes.filter(item => item.name === key))// 得到一个新数组  有可能有元素，也可有可能是空的
      // 赋值给当前声明的空数组  得到的routes是所有模块中满足权限要求的路由数组
      // 这个就表示是当前用户所拥有的权限的路由
    })
    context.commit('setRoutes', routes) // 将动态路由提交给mutations
    return routes // 这里为什么还要return  state数据 是用来 显示左侧菜单用的  return  是给路由addRoutes用的
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
